A cluster is a group of one or more hosts, input/output (I/O) units which contain one or more I/O controllers (e.g. SCSI adapters, network adapters etc.) and switches that are linked together by an interconnection fabric to operate as a single system to deliver high performance, low latency, and high reliability. In traditional clusters, hosts may use locally attached I/O controllers connected to one or more buses for operation. Current bus-based system 100 of a cluster may be shown in FIG. 1, including a plurality of separate devices such as a processor 102, an I/O and memory controller (or chipset) 104, a main memory 106, an I/O bridge 108 and one or more I/O devices, interconnected by one or more buses 103 and 105. A host bus 103 may provide a link between the processor 102, the I/O and memory controller 104 and the main memory 106. As opposed to the host bus 103, I/O bus 105 may be used as an interconnect transportation mechanism to transport data between highly integrated I/O devices, peripheral add-in boards and processor/memory subsystems. Examples of such an I/O bus used for high speed data transfer in servers, workstations, and personal computers may include an Industry Standard Architecture (ISA) bus, an Extended ISA (EISA) bus, and a more recent Peripheral Component Interconnect (PCI) bus as described in the latest version of “PCI Local Bus Specification, Revision 2.1” set forth by the PCI Special Interest Group (SIG) on Jun. 1, 1995. I/O devices may include storage devices, hard disk drives, or the like. I/O controllers 110 and 112 may be connected to the I/O bus 105 for access to the I/O devices. Similarly, a Local Area Network (LAN) Network Interface Card (NIC) 114 may be connected to the I/O bus 105 for access to a Local Area Network (LAN) 120.
However, such current bus-based systems may have a number of disadvantages and drawbacks. For instance, the I/O controllers 110, 112 are directly connected to the I/O bus 105, and are not connected to a network or a cluster. As a result, such I/O controllers 110, 112 on the I/O bus 105 may only be visible (or detectable) and addressable by the host processor 102, and not by any other host in a cluster, for example, hosts connected to LAN 120. Therefore, I/O resources of such a current bus-based system may not be readily available and effectively utilized in a cluster where performance and tolerance to failures are both important characteristics.
More importantly, the current bus-based systems do not have the property of multiple paths to the same I/O controller. Multiple paths between fabric-attached agents (e.g., hosts and I/O controllers) are desirable for purposes of optimizing performance and enhanced failure recovery properties. Some bus-based systems may support multiple I/O controllers (e.g. SCSI adapters, network adapters etc.) connected to the same set of devices (e.g. hard drives) but not multiple paths to a given I/O controller.
In addition, network adapter cards such as the LAN NIC 114 used in existing clusters typically have a single port per adapter. Hence, there is no known technique of creating separate device objects for separate ports of a network adapter for host-to-host communication in a cluster. For hosts that contain multiple network adapters, there is no known technique of creating a single device object and then providing a standard API interface application program interface (API) that can be used to get multiple port numbers to communicate with target fabric-attached agents (e.g., I/O controllers).
Accordingly, there is a need for a mechanism to report multiple paths to a target fabric-attached I/O controller and to report multiple ports connected to remote hosts in a cluster for host-to-host communication. Multiple paths to a target fabric-attached I/O controller in a cluster are essential for enabling a host to issue I/O requests at a faster rate and for dynamic load balancing to get over transient bottlenecks in certain segments of the cluster and to obtain better reliability and recoverability when link failures occur.